package com.qing.reflection;

//分析类的初始化
public class InitClass {
    public static void main(String[] args) throws ClassNotFoundException {
        //虚拟机启动，先初始化main方法类
        System.out.println("Main方法初始化！");

        //new一个类对象的时候，类会被初始化，并且父类如果没有被初始化，会先初始化父类
        //Son son = new Son();
        //System.out.println(Son.num);

        //反射也会产生主动引用
        // Class.forName("com.qing.reflection.Son");

        //不会产生类应用的方法
        //子类调用父类的静态变量，子类不会被加载
        // System.out.println(Son.num);

        //通过数组定义类引用，不会初始化这个类
        // Son[] sons = new Son[6];

        //调用常量不会触发父类和子类的初始化（常量在链接阶段就存入调用类的常量池中了）
        System.out.println(Son.NUM);
    }
}

class Father {
    static int num = 10;

    static {
        System.out.println("父类被初始化！");
    }
}

class Son extends Father {
    static {
        System.out.println("子类被初始化！");
    }
    static final int NUM = 10;
}
